البرمجة

تعلم حلقات التكرار جافا

تعليم حلقتي التكرار while و do..while في لغة جافا: شرح مفصل وشامل

تُعد حلقات التكرار من أهم الأدوات البرمجية التي تسمح بتنفيذ جزء معين من التعليمات البرمجية عدة مرات بشكل متكرر، مما يسهل التعامل مع البيانات وتنفيذ العمليات المتكررة دون الحاجة لكتابة نفس الكود بشكل متكرر. في لغة جافا (Java)، من بين الحلقات الأكثر استخدامًا حلقات while و do..while، ولكل منهما خصائصه وطريقة عمله التي تجعله مناسبًا لحالات برمجية معينة. هذا المقال سيقدم شرحًا وافيًا ومفصلاً عن هاتين الحلقتين، مع توضيح الفرق بينهما، كيفية استخدامهما، ومتى يُفضل استخدام كل منهما، إضافة إلى بعض الأمثلة التطبيقية التي تعزز فهم المفاهيم البرمجية المتعلقة بهما.


مفهوم حلقات التكرار في البرمجة

قبل الدخول في تفاصيل حلقات while و do..while، من الضروري فهم فكرة الحلقات بشكل عام. الحلقات هي بنية تحكم تسمح بتكرار تنفيذ كود معين عدة مرات طالما تحقق شرط معين. هذا الشرط يُقيم قبل أو بعد تنفيذ جسم الحلقة، حسب نوع الحلقة المستخدمة.

تُستخدم الحلقات بكثرة في البرامج التي تتطلب تكرار العمليات مثل معالجة المصفوفات، قراءة بيانات من المستخدم، تنفيذ الحسابات المعقدة بشكل متكرر، أو حتى تنفيذ عمليات مكررة بشكل مستمر طالما لم يتم استيفاء شرط التوقف.


الحلقة while في جافا

تعريف الحلقة while

حلقة while هي حلقة تكرار تُنفذ جسم الحلقة طالما أن الشرط الموضوع عليها صحيح (true). الشرط يُقيم قبل الدخول إلى جسم الحلقة، أي أن إذا كان الشرط خاطئًا من البداية، فلن يتم تنفيذ جسم الحلقة ولو مرة واحدة.

الصيغة العامة لحلقة while في جافا

java
while (condition) { // جسم الحلقة: تعليمات يتم تنفيذها في كل تكرار }
  • condition: تعبير منطقي (Boolean) يتم تقييمه قبل كل تكرار.

  • إذا كانت قيمة الشرط true يتم تنفيذ جسم الحلقة، ثم يعاد تقييم الشرط.

  • إذا كانت قيمة الشرط false تتوقف الحلقة ويتم الخروج منها.

كيفية عمل حلقة while

تبدأ الحلقة بتقييم شرطها. إن كان الشرط صحيحًا، ينفذ برنامج جافا التعليمات داخل جسم الحلقة. بعد تنفيذ التعليمات، يعود البرنامج إلى تقييم الشرط مرة أخرى. تستمر هذه العملية حتى يصبح الشرط خاطئًا، عندها تنتهي الحلقة وينتقل البرنامج إلى تنفيذ الكود الذي يلي الحلقة.

مثال عملي على حلقة while

java
int i = 1; while (i <= 5) { System.out.println("العدد هو: " + i); i++; }

في هذا المثال:

  • يبدأ المتغير i بالقيمة 1.

  • شرط الحلقة هو i <= 5.

  • طالما i أقل من أو يساوي 5، سيتم طباعة قيمة i.

  • في كل تكرار يتم زيادة i بمقدار 1.

  • عندما تصبح i = 6 يصبح الشرط خاطئًا وتتوقف الحلقة.


الحلقة do..while في جافا

تعريف الحلقة do..while

حلقة do..while تشبه إلى حد كبير حلقة while، مع اختلاف جوهري في ترتيب تقييم الشرط وتنفيذ جسم الحلقة. ففي هذه الحلقة، يتم تنفيذ جسم الحلقة أولاً، ثم يتم تقييم الشرط. هذا يعني أن جسم الحلقة يتم تنفيذه مرة واحدة على الأقل مهما كان الشرط صحيحًا أو خاطئًا.

الصيغة العامة لحلقة do..while

java
do { // جسم الحلقة: تعليمات يتم تنفيذها على الأقل مرة واحدة } while (condition);
  • condition: تعبير منطقي يتم تقييمه بعد تنفيذ جسم الحلقة.

  • إذا كان الشرط صحيحًا، تعود الحلقة لتنفيذ جسمها مرة أخرى.

  • إذا كان الشرط خاطئًا، تتوقف الحلقة وينتقل البرنامج إلى تنفيذ الكود التالي.

كيفية عمل حلقة do..while

يتم تنفيذ التعليمات داخل جسم الحلقة مرة واحدة بشكل إلزامي، بعدها يُقيم الشرط. إذا كان الشرط صحيحًا، يتم تكرار تنفيذ جسم الحلقة، وإذا كان خاطئًا تنتهي الحلقة.

مثال عملي على حلقة do..while

java
int i = 1; do { System.out.println("العدد هو: " + i); i++; } while (i <= 5);

هنا أيضاً يتم طباعة الأعداد من 1 إلى 5، لكن الفرق أنه يتم تنفيذ جسم الحلقة أول مرة دون النظر إلى قيمة الشرط أولاً.


مقارنة تفصيلية بين while و do..while

المعيار while do..while
تقييم الشرط قبل تنفيذ جسم الحلقة بعد تنفيذ جسم الحلقة
الحد الأدنى لتنفيذ الجسم قد لا ينفذ جسم الحلقة أبدًا إذا كان الشرط خاطئًا من البداية ينفذ جسم الحلقة مرة واحدة على الأقل
الاستخدام النموذجي عندما نريد التأكد من تحقق شرط قبل تنفيذ الحلقة عندما نريد تنفيذ الحلقة مرة واحدة على الأقل، ثم التحقق من الشرط
قابلية الاستخدام في معظم الحالات العامة في الحالات التي تتطلب تنفيذ الحلقة حتى ولو لم يتحقق شرط التكرار مسبقًا
احتمالية الدخول في حلقة لا نهائية أعلى إذا لم يتم تعديل الشرط داخل الحلقة نفس الاحتمالية إذا لم يتم تعديل الشرط داخل الحلقة

حالات استخدام حلقات while و do..while

متى نستخدم while؟

  • عندما تكون الحاجة إلى التأكد من تحقق شرط معين قبل تنفيذ أي جزء من الكود داخل الحلقة.

  • في حالات مثل قراءة بيانات من المستخدم حيث قد لا يرغب المستخدم في إدخال أي بيانات.

  • في حالات الفحص المستمر لشروط معينة مثل انتظار حدوث حدث معين أو توافر بيانات.

متى نستخدم do..while؟

  • عندما نريد تنفيذ كود داخل الحلقة مرة واحدة على الأقل سواء تحقق الشرط أو لم يتحقق.

  • في حالة تنفيذ قوائم اختيار أو قوائم تكرار، حيث نعرض القائمة للمستخدم أولاً ثم نطلب منه الاختيار.

  • عند الحاجة إلى تنفيذ الإجراءات ثم التحقق من استمرار الحاجة للتكرار بناءً على مدخلات المستخدم.


شرح تفصيلي لكيفية التحكم في تدفق الحلقة

تتيح حلقات التكرار في جافا التحكم الكامل في عدد مرات تكرار تنفيذ الكود، وذلك باستخدام شروط منطقية معقدة، إضافة إلى استخدام جمل التحكم مثل break و continue:

  • break: تستخدم للخروج الفوري من الحلقة بغض النظر عن تحقق الشرط.

  • continue: تستخدم لتخطي التكرار الحالي والعودة لتقييم الشرط في التكرار التالي.

مثال يوضح استخدام break و continue داخل حلقة while

java
int i = 1; while (i <= 10) { if (i == 5) { break; // يخرج من الحلقة عند i=5 } if (i % 2 == 0) { i++; continue; // يتخطى طباعة الأعداد الزوجية } System.out.println("العدد الفردي: " + i); i++; }

في هذا المثال:

  • يتم طباعة الأعداد الفردية فقط.

  • عندما يصل i إلى 5، تنكسر الحلقة وتخرج.


أثر اختيار الحلقة المناسبة على جودة وكفاءة البرمجيات

اختيار الحلقة الأنسب بين while و do..while يؤثر بشكل مباشر على سهولة قراءة الكود، كفاءته، وسهولة صيانته. فمثلاً، اختيار do..while في مكان يحتاج فيه الكود لتنفيذ أول مرة شرطًا محددًا يوفر كتابة كود أكثر وضوحًا ويقلل احتمالية الخطأ. في المقابل، اختيار while عندما لا يلزم تنفيذ الكود إلا إذا تحقق الشرط، يضمن سلامة منطق البرنامج ويمنع تنفيذ تعليمات غير مرغوب فيها.


الأمثلة التطبيقية المتقدمة

مثال 1: قراءة مدخلات من المستخدم باستخدام حلقة while

في هذا المثال نريد قراءة أعداد صحيحة من المستخدم حتى يتم إدخال الرقم صفر، ونحسب مجموع الأعداد المدخلة.

java
import java.util.Scanner; public class SumNumbers { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int number; int sum = 0; System.out.println("أدخل أعداد صحيحة (0 للخروج):"); number = scanner.nextInt(); while (number != 0) { sum += number; number = scanner.nextInt(); } System.out.println("مجموع الأعداد هو: " + sum); } }

في هذا المثال:

  • نستخدم حلقة while لأننا لا نريد تنفيذ الجسم إذا كان الرقم المدخل هو 0 من البداية.

  • الحلقة تستمر في جمع الأعداد حتى يتم إدخال 0.

مثال 2: عرض قائمة خيارات للمستخدم باستخدام do..while

java
import java.util.Scanner; public class MenuExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int choice; do { System.out.println("اختر من القائمة:"); System.out.println("1. عرض الوقت"); System.out.println("2. عرض التاريخ"); System.out.println("3. الخروج"); choice = scanner.nextInt(); switch (choice) { case 1: System.out.println("الوقت الحالي هو: " + java.time.LocalTime.now()); break; case 2: System.out.println("التاريخ اليوم هو: " + java.time.LocalDate.now()); break; case 3: System.out.println("إنهاء البرنامج."); break; default: System.out.println("خيار غير صالح."); } } while (choice != 3); } }

في هذا المثال:

  • نستخدم do..while لأننا نريد عرض القائمة للمستخدم مرة واحدة على الأقل.

  • بعدها نكرر عرض القائمة طالما لم يختر المستخدم الخروج (3).


اعتبارات مهمة عند استخدام حلقات while و do..while

1. تجنب الحلقات اللانهائية

أحد أبرز الأخطاء البرمجية هو الوقوع في حلقة لا نهائية (Infinite Loop)، وهي الحلقة التي لا ينتهي تنفيذها أبداً بسبب عدم تحقق شرط الخروج أو عدم تعديل المتغيرات التي تؤثر في الشرط. يجب دائمًا التأكد من وجود تحديث منطقي داخل جسم الحلقة يؤدي في النهاية إلى تحقق شرط التوقف.

2. أداء الحلقة

تعتبر حلقات while و do..while من حلقات التكرار البسيطة التي يتم تنفيذها بشكل سريع في جافا. ومع ذلك، يمكن أن تؤثر طريقة كتابة الشرط وتعقيد العمليات داخل جسم الحلقة على الأداء العام للبرنامج، خصوصًا في حالة التكرار الكبير. لذا يفضل تقليل العمليات الحسابية داخل جسم الحلقة إلى الحد الأدنى، والاستفادة من التقنيات البرمجية لتحسين الأداء.

3. استخدام الحلقات المتداخلة

يمكن استخدام حلقتي while و do..while بشكل متداخل لتنفيذ عمليات معقدة مثل معالجة المصفوفات ثنائية الأبعاد أو قواعد بيانات متعددة. لكن مع ذلك يجب الحرص على كتابة كود واضح مع تعليقات مناسبة لتسهيل صيانته.


جدول مقارنة بين while و do..while

الخاصية while do..while
تقييم الشرط قبل تنفيذ جسم الحلقة بعد تنفيذ جسم الحلقة
تنفيذ جسم الحلقة قد لا يتم التنفيذ إطلاقاً إذا كان الشرط خاطئًا يتم التنفيذ مرة واحدة على الأقل
مناسبة لـ الحالات التي يجب التأكد فيها من تحقق الشرط أولاً الحالات التي تتطلب تنفيذ الكود على الأقل مرة واحدة
إمكانية الدخول في حلقة لا نهائية ممكنة إذا لم يتم تحديث الشرط داخل الجسم ممكنة إذا لم يتم تحديث الشرط داخل الجسم
الاستخدام الشائع معالجة البيانات، انتظار مدخلات قوائم الاختيار، تنفيذ المهام المبدئية

خاتمة

حلقتا while و do..while في لغة جافا تمثلان أدوات حيوية وأساسية لتنفيذ التكرار داخل البرامج. تتفرد حلقة while بكونها تقيّم الشرط قبل الدخول إلى جسم الحلقة، مما يجعلها مثالية للحالات التي تحتاج تحقق شرط مسبق. في المقابل، تقدم حلقة do..while ميزة تنفيذ الجسم مرة واحدة على الأقل قبل تقييم الشرط، مما يجعلها مناسبة للحالات التي تستدعي تنفيذ التعليمات أحيانًا على الأقل قبل التحقق من استمرار التكرار.

الفهم العميق لطريقة عمل كل منهما، بالإضافة إلى معرفة متى وأين يتم استخدام كل نوع، يساعد المبرمجين على كتابة برامج أكثر فعالية وكفاءة، ويقلل من الأخطاء الناتجة عن سوء استخدام الحلقات. وأخيرًا، لا بد من الحرص على كتابة شروط واضحة وتحديث المتغيرات ذات الصلة لضمان توقف الحلقات عند الظروف المناسبة وتجنب الدخول في حالات التكرار اللامنتهي التي قد تسبب توقف البرنامج أو استهلاك غير مبرر للموارد.


المراجع